#pragma once
#include <functional>
#include "Socket.h"        // 封装套接字操作
#include "InetAddress.h"   // 封装IP和端口
#include "Channel.h"      // 管理I/O事件回调
#include "EventLoop.h"     // 事件循环核心
#include"Buffer.h"

class Connection {
private:
    EventLoop *loop_;       // 事件循环指针（由外部传入）
    Socket *clientsock_;      // 服务端监听Socket（内部创建）
    Channel *clientchannel_;// 监听Socket对应的Channel（绑定读事件回调）
    std::function<void(Connection*)> closecallback_;
    std::function<void(Connection*)> errorcallback_;
    Buffer inputbuffer_;
    Buffer outputbuffer_;
public:
    Connection(EventLoop *loop,Socket *clientsock);
    ~Connection();

    std::string ip();
    uint16_t port();

    int fd() const;         // 返回文件描述符

    void closecallback();
    void errorcallback();

    void setclosecallback(std::function<void(Connection*)> f);
    void seterrorcallback(std::function<void(Connection*)> f);

    void onmessage();
};  